﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Torneo.DataAccess;
using Torneo.Entidades;
using System.Data;
using System.Data.Objects;

namespace Torneo.Repository
{
    public class UsuarioRepository : IUsuarioRepository
    {
        private TorneoDbContext _context;

        public UsuarioRepository(TorneoDbContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("Null Context");
            }

            this._context = context;
        }
        public Usuario ObtenerUsuarioPorId(int id)
        {
            return _context.Usuarios.SingleOrDefault(x => x.UsuarioId == id);
        }

        public IList<Entidades.Usuario> ObtenerTodos()
        {
            return _context.Usuarios.ToList();
        }

        public void AgregarUsuario(Usuario usuario)
        {
            usuario.Password = Encrypt.EncodeTo64(usuario.Password);
            _context.Usuarios.Add(usuario);
            _context.SaveChanges();
        }

        public void EliminarUsuario(Usuario usuario)
        {
            _context.Usuarios.Remove(usuario);
            _context.SaveChanges();
        }

        public Usuario ObtenerUsuariosPorId(int id)
        {
            return _context.Usuarios.Single(x=> x.UsuarioId == id);            
        } 

        public void ModificarUsuario(Usuario usuario)
        {
            _context.Usuarios.Attach(usuario);
            _context.Entry(usuario).State = EntityState.Modified;
            _context.SaveChanges();
        }

        #region Miembros de IDisposable

        public void Dispose()
        {
            this._context.Dispose();
        }

        #endregion



        public Usuario AutenticarUsuario(string user, string password)
        {
            if (_context.Usuarios.Count() == 0)
            {
                _context.Usuarios.Add(new Usuario() { Nombre = "Admin", Apellido="Admin", Password=Encrypt.EncodeTo64("admin"), User="admin", UsuarioId=0 });
                _context.SaveChanges(); 
            }
           string encodedPw = Encrypt.EncodeTo64(password);
           Usuario userLoggedIn = _context.Usuarios.SingleOrDefault(x => (x.User == user) && (x.Password == encodedPw));
           if (userLoggedIn != null)
               return userLoggedIn;
           else
               throw new Exception("Usuario y/o contraseña incorrecta");
        }
    }
}
